home *** CD-ROM | disk | FTP | other *** search
/ Pascal Super Library / Pascal Super Library (CW International)(1997).bin / LISTS / LISTS4 / LISTDEMO.PAS next >
Pascal/Delphi Source File  |  1989-06-25  |  7KB  |  268 lines

  1. {$A-,B-,D+,E-,F-,I-,L+,N-,O-,R-,S-,V-}
  2. {$M 16384,0,655360}
  3. Uses Lists, Crt;
  4.  
  5. Type
  6.    EntryTypes                =   (NumType, StrType);
  7.  
  8.    DemoListObj               =   Object (ListObj)
  9.                                     C_Entry      :   EntryPtr;
  10.  
  11.                                     Function     CurrentEntry:EntryPtr;
  12.                                     Procedure    MoveTo(Loc:EntryPtr);
  13.                                     Procedure    Display;
  14.  
  15.                                     Constructor  Init;
  16.                                  End;
  17.  
  18.    DemoEntryObj              =   Object (EntryObj)
  19.                                     EntryType    :   EntryTypes;
  20.  
  21.                                     Constructor  Add;
  22.                                     Constructor  Insert;
  23.                                     Destructor   RemoveFromList;
  24.                                  End;
  25.    StringObj                 =   Object (DemoEntryObj)
  26.                                     Str          :   String;
  27.  
  28.                                     Constructor  Add;
  29.                                     Constructor  Insert(Loc:EntryPtr);
  30.                                     Destructor   RemoveFromList;
  31.                                     Procedure    Input; virtual;
  32.                                  End;
  33.    NumberObj                 =   Object (DemoEntryObj)
  34.                                     Num          :   Real;
  35.  
  36.                                     Constructor  Add;
  37.                                     Constructor  Insert(Loc:EntryPtr);
  38.                                     Destructor   RemoveFromList;
  39.                                     Procedure    Input; virtual;
  40.                                  End;
  41.  
  42.    DemoEntryObjPtr           =   ^DemoEntryObj;
  43.    NumberObjPtr              =   ^NumberObj;
  44.    StringObjPtr              =   ^StringObj;
  45.  
  46.    CharSet                   =   Set of Char;
  47.  
  48.  
  49. Var
  50.    List                      :   DemoListObj;
  51.  
  52.  
  53. Procedure Menu(St:String; ReturnSet:CharSet; Var Ch:Char);
  54. Begin
  55.    GotoXY(1,3); Write(St); ClrEol;
  56.    Repeat
  57.       Ch:=UpCase(ReadKey);
  58.    Until Ch in ReturnSet;
  59. End;
  60.  
  61. Function Location:DemoEntryObjPtr;
  62. Var
  63.    Ch                        :   Char;
  64.  
  65. Begin
  66.    Menu('(C)urrent entry   (F)irst entry   (L)ast entry   '+
  67.         '(N)ext entry   (P)rev entry', ['C','F','L','N','P',#27], Ch);
  68.    Case Ch of
  69.      'C'   :   Location:=DemoEntryObjPtr(List.CurrentEntry);
  70.      'F'   :   Location:=DemoEntryObjPtr(List.FirstEntry);
  71.      'L'   :   Location:=DemoEntryObjPtr(List.LastEntry);
  72.      'N'   :   Location:=DemoEntryObjPtr(List.CurrentEntry^.NextEntry);
  73.      'P'   :   Location:=DemoEntryObjPtr(List.CurrentEntry^.PrevEntry);
  74.    End;
  75. End;
  76.  
  77. Function GetEntryType:EntryTypes;
  78. Var
  79.    Ch                     :   Char;
  80.  
  81. Begin
  82.    Menu('(N)umber   (S)tring', ['N','S',#27], Ch);
  83.    Case Ch of
  84.       'N'   :   GetEntryType:=NumType;
  85.       'S'   :   GetEntryType:=StrType;
  86.    End;
  87. End;
  88.  
  89. Function DemoListObj.CurrentEntry;
  90. Begin
  91.    CurrentEntry:=C_Entry;
  92. End;
  93.  
  94. Procedure DemoListObj.MoveTo;
  95. Begin
  96.    If Loc=nil Then
  97.       Write(^G)
  98.    Else
  99.       C_Entry:=Loc;
  100. End;
  101.  
  102. Procedure DemoListObj.Display;
  103. Var
  104.    Pos                       :   EntryPtr;
  105.    I                         :   Byte;
  106.  
  107. Begin
  108.    GotoXY(1,5);
  109.  
  110.    For I:=1 To 20 Do DelLine;
  111.  
  112.    Pos:=List.FirstEntry;
  113.  
  114.    With List Do
  115.    While Not (Pos=nil) Do Begin
  116.       If Pos=CurrentEntry Then
  117.          TextColor(White)
  118.       Else
  119.          TextColor(Cyan);
  120.  
  121.          Case DemoEntryObjPtr(Pos)^.EntryType of
  122.             NumType   :   Write(NumberObjPtr(Pos)^.Num:1:9);
  123.             StrType   :   Write(StringObjPtr(Pos)^.Str);
  124.          End;
  125.       ClrEol;
  126.       Writeln;
  127.       Pos:=Pos^.NextEntry;
  128.    End;
  129. End;
  130.  
  131. Constructor DemoListObj.Init;
  132. Begin
  133.    Lists.ListObj.Init;
  134.  
  135.    C_Entry:=nil;
  136. End;
  137.  
  138. Constructor DemoEntryObj.Add;
  139. Var
  140.    Number                    :   NumberObjPtr;
  141.    Str                       :   StringObjPtr;
  142.    Entry                     :   DemoEntryObj;
  143.  
  144. Begin
  145.    Case GetEntryType of
  146.       NumType   :   New(Number, Add);
  147.       StrType   :   New(Str, Add);
  148.    End;
  149. End;
  150.  
  151. Constructor DemoEntryObj.Insert;
  152. Var
  153.    Number                    :   NumberObjPtr;
  154.    Str                       :   StringObjPtr;
  155.    Entry                     :   DemoEntryObj;
  156.  
  157. Begin
  158.    Case GetEntryType of
  159.       NumType   :   New(Number, Insert(Location));
  160.       StrType   :   New(Str, Insert(Location));
  161.    End;
  162. End;
  163.  
  164. Destructor DemoEntryObj.RemoveFromList;
  165. Begin
  166.    If @Self=nil Then
  167.       Write(^G)
  168.    Else Begin
  169.       Case EntryType of
  170.          NumType   :   Dispose(NumberObjPtr(@Self), RemoveFromList);
  171.          StrType   :   Dispose(StringObjPtr(@Self), RemoveFromList);
  172.       End;
  173.    End;
  174. End;
  175.  
  176. Constructor StringObj.Add;
  177. Begin
  178.    Input;
  179.    EntryObj.Add(List);
  180. End;
  181.  
  182. Constructor StringObj.Insert;
  183. Begin
  184.    If Loc=nil Then
  185.       Write(^G)
  186.    Else Begin
  187.       Input;
  188.       Lists.EntryObj.Insert(List, Loc);
  189.    End;
  190. End;
  191.  
  192. Destructor StringObj.RemoveFromList;
  193. Begin
  194.    Lists.EntryObj.Remove(List);
  195. End;
  196.  
  197. Procedure StringObj.Input;
  198. Begin
  199.    EntryType:=StrType;
  200.    GotoXY(1,3); Write('Enter string:'); ClrEol;
  201.    Readln(Str);
  202. End;
  203.  
  204. Constructor NumberObj.Add;
  205. Begin
  206.    Input;
  207.    EntryObj.Add(List);
  208. End;
  209.  
  210. Constructor NumberObj.Insert;
  211. Begin
  212.    If Loc=nil Then
  213.       Write(^G)
  214.    Else Begin
  215.       Input;
  216.       Lists.EntryObj.Insert(List, Loc);
  217.    End;
  218. End;
  219.  
  220. Destructor NumberObj.RemoveFromList;
  221. Begin
  222.    Lists.EntryObj.Remove(List);
  223. End;
  224.  
  225. Procedure NumberObj.Input;
  226. Begin
  227.    EntryType:=NumType;
  228.    GotoXY(1,3); Write('Enter number:'); ClrEol;
  229.    Readln(Num);
  230. End;
  231.  
  232. Var
  233.    Ch                        :   Char;
  234.    Entry                     :   DemoEntryObj;
  235.  
  236. Begin
  237.    List.Init;
  238.    TextColor(Red); TextBackground(Blue);
  239.    ClrScr;
  240.    Writeln('ListDemo - Demo for LISTS v4.0');
  241.  
  242.    Repeat
  243.       GotoXY(1,4);
  244.       TextColor(LightGray);
  245.       If List.CurrentEntry=nil Then
  246.          Write('List is unaccessed')
  247.       Else
  248.          Write('List is fine');
  249.  
  250.       Write('    Memory available:', MemAvail);
  251.       ClrEol;
  252.  
  253.       List.Display;
  254.  
  255.       TextColor(Green);
  256.       Menu('(A)dd entry   (I)nsert entry   (M)ove to entry   '+
  257.            '(R)emove entry   (Q)uit', ['A','I','M','R','Q'], Ch);
  258.  
  259.       Case Ch of
  260.          'A'   :   Entry.Add;
  261.          'I'   :   Entry.Insert;
  262.          'R'   :   Location^.RemoveFromList;
  263.          'M'   :   List.MoveTo(Location);
  264.       End;
  265.    Until Ch='Q';
  266.    GotoXY(1,23);
  267. End.
  268.